isf 0.1.0

Parsing, Deserialization and Serialization of the Interactive Shader Format.
Documentation
/*{
    "CATEGORIES": [
        "Pattern", "Color"
    ],
    "CREDIT": "VIDVOX",
    "DESCRIPTION": "Creates a stripe pattern with randomized colors",
    "INPUTS": [
        {
            "DEFAULT": 0.25,
            "MAX": 1,
            "MIN": 0,
            "NAME": "width",
            "TYPE": "float"
        },
        {
            "DEFAULT": 0,
            "MAX": 1,
            "MIN": 0,
            "NAME": "offset",
            "TYPE": "float"
        },
        {
            "DEFAULT": 0,
            "MAX": 1,
            "MIN": 0,
            "NAME": "hue",
            "TYPE": "float"
        },
        {
            "DEFAULT": 0.5,
            "MAX": 1,
            "MIN": 0,
            "NAME": "saturation",
            "TYPE": "float"
        },
        {
            "DEFAULT": 0.95,
            "MAX": 1,
            "MIN": 0,
            "NAME": "brightness",
            "TYPE": "float"
        },
        {
            "DEFAULT": 0,
            "NAME": "vertical",
            "TYPE": "bool"
        },
        {
            "DEFAULT": 1,
            "NAME": "randHue",
            "TYPE": "bool"
        },
        {
            "DEFAULT": 0,
            "NAME": "randSaturation",
            "TYPE": "bool"
        },
        {
            "DEFAULT": 0,
            "NAME": "randBright",
            "TYPE": "bool"
        },
        {
            "DEFAULT": 0,
            "NAME": "randAlpha",
            "TYPE": "bool"
        },
        {
            "DEFAULT": 0.71,
            "MAX": 1,
            "MIN": 0,
            "NAME": "rSeed",
            "TYPE": "float"
        }
    ],
    "ISFVSN": "2"
}
*/

float rand(vec2 co){
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

vec4 rand4(vec4 co)	{
	vec4	returnMe = vec4(0.0);
	returnMe.r = rand(co.rg);
	returnMe.g = rand(co.gb);
	returnMe.b = rand(co.ba);
	returnMe.a = rand(co.rb);
	return returnMe;
}

vec3 hsv2rgb(vec3 c)	{
	vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
	vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
	return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}

void main() {

	vec4 out_color = vec4(0.0);
	float coord = (vertical) ? isf_FragNormCoord.x : isf_FragNormCoord.y;
	vec4 hsv = vec4(hue, saturation, brightness, 1.0);
	float minW = (vertical) ? max(width,1.0/RENDERSIZE.x) : max(width,1.0/RENDERSIZE.y);
	float index = floor((coord+offset) / minW);
	
	hsv.r = (randHue) ? mod(hsv.r + rand(vec2(index, rSeed + 0.34219)),1.0) : hsv.r;
	hsv.g = (randSaturation) ? mod(hsv.g + rand(vec2(index, rSeed + 0.57731)),1.0) : hsv.g;
	hsv.b = (randBright) ? mod(hsv.b + rand(vec2(index, rSeed + 0.79436)),1.0) : hsv.b;
	hsv.a = (randAlpha) ? rand(vec2(hsv.a + index, rSeed + 1.37665)) : hsv.a;
	
	out_color.rgb = hsv2rgb(hsv.rgb);
	out_color.a = hsv.a;
	
	gl_FragColor = out_color;
}